iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

這個插件就如同名稱一樣,是專門寄信使用的(恩對,介紹就這樣而已)。

準備

在開始使用之前要先做好前置準備,首先至少要有一個 SMTP Server,這邊使用 Google 提供的 SMTP Server,可以申請一個測試用的帳號,也可以使用自己的帳號。

不管用哪種帳號,建議是開啟兩階段驗證,並且使用應用程式密碼,這樣可以確保帳號安全(萬一哪天不小心被誰看到了這個程式,或是推上 github 之類的,被其他人看到密碼,相對來說比較安全)。

那要如何設定呢?在 Google 帳戶 裡面的安全性 -> 登入 Google 設定好兩階段驗證後,應該會看到 應用程式密碼 ,像這樣:

然後直接點下去後,在 選取應用程式 中選擇 其他(自訂名稱)

隨便輸入一個名稱後,按下產生。

然後最後會出現一組隨機產生的 16 位的密碼(這邊我把它碼掉了,雖然不碼好像也不會出問題,但我還是習慣把它碼掉了),將它複製下來,等一下會用到,然後就結束了。

Flask-Mail 使用

這邊開一個新的專案,然後按照慣例還是要使用 pip 安裝一下。

$ pipenv install Flask-Mail

安裝好了之後,就來建立一下架構吧。大概長這樣:

ithome_chatroom
├── templates
│   └── mail.html  # 寄信首頁
├── app.py  # 主要的檔案
├── config.py  # 設定檔
├── Pipfile  # 不管它,建立虛擬環境時自己會出現
└── Pipfile.lock  # 不管它,安裝套件時自己會出現

首先要設定一下有關寄信的設定,比較主要要增加的設定就這幾個。

config.py

MAIL_SERVER = 'smtp.gmail.com'  # 預設為 localhost
MAIL_PORT = 587  # 預設為 25
MAIL_USE_TLS = True  # 預設為 False
MAIL_USERNAME = <你的 Gmail 帳號>  # 預設為 None
MAIL_PASSWORD = <剛剛的複製的應用程式密碼>  # 預設為 None
MAIL_DEFAULT_SENDER = MAIL_USERNAME  # 預設為 None,這個不設也可以

再來就是比較主要的後端了。

app.py

from flask_mail import Mail, Message  # 增加這行

import config


app = Flask(__name__)
app.config.from_object(config)

# 使用 flask_mail
mail = Mail(app)


@app.route('/mail', methods=['GET', 'POST'])
def send_mail():
    if request.method == 'GET':
        ''' 瀏覽器送出需求要這個頁面時 '''
        response = make_response(render_template('mail.html'))
    elif request.method == 'POST':
        ''' 送出寄信 '''
        # 收件人
        recipient = request.values.get('recipient', None)
        # 標題
        title = request.values.get('title', '')
        # 內容
        content = request.values.get('content', '')

        # 製作信件
        msg = Message(title, recipients=[recipient])
        msg.body = content

        # 送出信件
        mail.send(msg)

        response = make_response('Success')
    else:
        response = make_response(redirect(url_for('send_mail')))

    return response


if __name__ == "__main__":
    app.run()

最後是可以寫信的前端頁面。

mail.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Mail test</title>
</head>

<body>
    <h1>Hello</h1>
    <h2>Mail test</h2>
    <form action="/mail" method="POST">
        <fieldset>
            <legend>Send mail</legend>
            
            <label>收件人</label><br />
            <input type="email" name="recipient" required /><br />
            
            <label>標題</label><br />
            <input type="text" name="title" /><br />
            
            <label>內容</label><br />
            <input type="text" name="content" /><br />
            
            <input type="submit" value="送出" />
        </fieldset>
    </form>
</body>

</html>

既然都寫完了,那就直接來看看結果吧,寫一封信寄給自己測試一下好了。

然後等它跑一下,你就會在自己的信箱看到自己寄給自己的信了。

那麼就大概這樣,寄信其實沒有什麼好說的,之所以還要講它一部分原因是因為這個功能意外的蠻常使用到的,另一部分原因後面會講到。

大家掰~掰~


上一篇
Day 23 Flask-Login
下一篇
Day 25 Redis (上)
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言